home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1995 June: Reference Library / Dev.CD Jun 95 / Dev.CD Jun 95.toast / What's New? / New System Software Extensions / QuickDraw 3D ß / Programming / Convert Sources from Pre Beta / Release Notes QD3D B1C1
Encoding:
Text File  |  1995-03-16  |  11.9 KB  |  592 lines  |  [TEXT/ttxt]

  1.                     Welcome to the B1C1 QuickDraw 3D Release
  2.  
  3.  
  4. Installation
  5.  
  6.  
  7. Note that there are five shared libraries that make up the QuickDraw 3D 
  8. package and which should be installed in your Extensions folder:
  9.  
  10.  
  11. QuickDraw™ 3D
  12.  
  13. QuickDraw™ 3D Accel. Mgr.
  14.  
  15. QuickDraw 3D™ Soft. Rast.
  16.  
  17. QuickDraw™ 3D Viewer
  18.  
  19. ControllerCore
  20.  
  21.  
  22. Your application only needs to link against QuickDraw™ 3D.
  23.  
  24.  
  25. New in this release is the 3D Viewer, which similar to the QuickTime 
  26. movie controller, but it lets you manipulate 3D objects.  You don’t need to 
  27. know any QD3D calls to make use of it and it only takes 5 calls to add it to 
  28. your application.  If you want to use it, you need to link against 
  29. QuickDraw™ 3D Viewer.
  30.  
  31.  
  32. As always, please “weak link” your apps and determine if they are 
  33. installed by checking that the entry point to the QD3D library has been 
  34. loaded, see page 98 of Develop 21.
  35.  
  36.  
  37. Changes
  38.  
  39.  
  40. • QuickDraw 3D now does it memory allocation out Multifinder Temp 
  41. memory.  This gives you total control over your heap and you can make 
  42. the size of your application’s heap as small as you need it to be for your 
  43. requirements. Note that in the case where we run out/can’t allocate out of 
  44. the temp memory, we will post an “out of memory” warning and start 
  45. allocating out of your application’s heap (we will continue posting the 
  46. warning every time we allocate out of your heap).  When we run out of 
  47. memory, we will post an error, not a warning.
  48.  
  49.  
  50. • We have further collapsed the headers from previosu releases, all 
  51. geometries can now be found in QD3DGeometry.h.
  52.  
  53.  
  54. Name changes - The enclosed MPW canon script will apply all the name 
  55. changes that are part of Beta.
  56.  
  57.  
  58. Here is a description of the changes:
  59.  
  60.  
  61. • All routines names were changed from Er to Q3.
  62.  
  63.  
  64. • All types were changed from Et to TQ3, with the underscores in the 
  65. names removed.
  66.  
  67.  
  68. • All constants were changed from Ec to kQ3, with the underscores in the 
  69. names removed.
  70.  
  71.  
  72. • Functions that ended with _Draw, _Pick, were replaced by _Submit.  
  73. Whether you are doing drawing, picking, or bounding box operations is 
  74. determined by the Q3View_StartFoo  call (Q3View_StartRendering, 
  75. Q3View_StartPicking, Q3View_StartBoundingBox, or 
  76. Q3View_StartBoundingSphere).  This allows you to have only one traversal 
  77. loop defined as a function in your  application, if you so desire.
  78.  
  79.  
  80.  ErBox_Pick
  81.  
  82.  ErDisplayGroup_Pick
  83.  
  84.  ErGeneralPolygon_Pick
  85.  
  86.  ErGeometry_Pick
  87.  
  88.  ErLine_Pick
  89.  
  90.  ErMarker_Pick
  91.  
  92.  ErNURBCurve_Pick
  93.  
  94.  ErNURBPatch_Pick
  95.  
  96.  ErPoint_Pick
  97.  
  98.  ErPolygon_Pick
  99.  
  100.  ErTriGrid_Pick
  101.  
  102.  ErTriangle_Pick
  103.  
  104.  
  105. • Attributes were collapsed into a single type and some attributes were 
  106. removed.
  107.  
  108.  
  109.  ErAttributeSet_Compact
  110.  
  111.  ErAttributeSet_GetCSGEquation
  112.  
  113.  ErAttributeSet_GetConstructiveSolidGeometryID
  114.  
  115.  ErAttributeSet_GetType
  116.  
  117.  ErAttribute_Delete
  118.  
  119.  ErAttribute_Dispose
  120.  
  121.  ErFaceAttributeSet_New
  122.  
  123.  ErFaceAttributeSet_SizedNew
  124.  
  125.  ErGeometryAttributeSet_New
  126.  
  127.  ErGeometryAttributeSet_SizedNew
  128.  
  129.  ErVertexAttributeSet_New
  130.  
  131.  ErVertexAttributeSet_SizedNew
  132.  
  133.  ErViewAttributeSet_New
  134.  
  135.  ErViewAttributeSet_SizedNew
  136.  
  137.  
  138. • Function names were cleaned up and made consistent:
  139.  
  140.  
  141.     Functions of type FooData_Empty are now Foo_EmptyData
  142.  
  143.  ErBoxData_Empty
  144.  
  145.  ErCStringData_Empty
  146.  
  147.  ErGeneralPolygonData_Empty
  148.  
  149.  ErHitData_Empty
  150.  
  151.  ErLineData_Empty
  152.  
  153.  ErMarkerData_Empty
  154.  
  155.  ErNURBCurveData_Empty
  156.  
  157.  ErNURBPatchData_Empty
  158.  
  159.  ErPointData_Empty
  160.  
  161.  ErPolygonData_Empty
  162.  
  163.  ErTriGridData_Empty
  164.  
  165.  ErTriangleData_Empty
  166.  
  167.  ErUnknownBinaryData_Empty
  168.  
  169.  ErUnknownTextData_Empty
  170.  
  171.  
  172.     The function to create a renderer based on a type has changed
  173.  
  174.  ErRenderer_New Q3Renderer_NewFromType
  175.  
  176.  
  177. • The following calls have been removed:
  178.  
  179.  
  180.  ErController_Decomission
  181.  
  182.  ErController_MoveTracker
  183.  
  184.  ErDrawContext_ClearImageBuffer
  185.  
  186.  ErDrawContext_GetActiveBuffer
  187.  
  188.  ErDrawContext_GetClearImageState
  189.  
  190.  ErDrawContext_SetActiveBuffer
  191.  
  192.  ErDrawContext_SetClearImageState
  193.  
  194.  ErDrawContext_UpdateFrontBuffer
  195.  
  196.  ErElementClass_GetElementSize
  197.  
  198.  ErFile_Open
  199.  
  200.  ErGeneralPolygon_GetContourAttributeSet
  201.  
  202.  ErGeneralPolygon_SetContourAttributeSet
  203.  
  204.  ErLightGroup_FindLight
  205.  
  206.  ErMatrix3x3_SetRotateAboutPoint_Deg
  207.  
  208.  ErMatrix4x4_SetRotateAboutAxis_Deg
  209.  
  210.  ErMatrix4x4_SetRotateAboutPoint_Deg
  211.  
  212.  ErMatrix4x4_SetRotate_XYZ_Deg
  213.  
  214.  ErMatrix4x4_SetRotate_X_Deg
  215.  
  216.  ErMatrix4x4_SetRotate_Y_Deg
  217.  
  218.  ErMatrix4x4_SetRotate_Z_Deg
  219.  
  220.  ErMesh_PickHitGetInfo
  221.  
  222.  ErOrderedDisplayGroup_CountObjectType
  223.  
  224.  ErPick_GetFirstHit
  225.  
  226.  ErPick_GetNextHit
  227.  
  228.  ErPick_GetPreviousHit
  229.  
  230.  ErPoint3D_To2D
  231.  
  232.  ErQuaternion_SetRotateAboutAxis_Deg
  233.  
  234.  ErQuaternion_SetRotateXYZ_Deg
  235.  
  236.  ErQuaternion_SetRotateX_Deg
  237.  
  238.  ErQuaternion_SetRotateY_Deg
  239.  
  240.  ErQuaternion_SetRotateZ_Deg
  241.  
  242.  ErRenderer_New
  243.  
  244.  ErRenderer_SetIsBoundingBoxVisibleFunc
  245.  
  246.  ErTracker_GetAbsolute
  247.  
  248.  ErTracker_GetCoordinates
  249.  
  250.  ErTracker_SetAbsolute
  251.  
  252.  ErTracker_SetCoordinates
  253.  
  254.  
  255. Explanation:
  256.  
  257.  
  258.  ErController_Decomission
  259.  
  260.  Renamed to ErController_Decommission.
  261.  
  262.  
  263.  ErController_MoveTracker
  264.  
  265.  Replaced by the calls:
  266.  
  267. ErController_GetTrackerPosition
  268.  
  269. ErController_SetTrackerPosition
  270.  
  271. ErController_MoveTrackerPosition
  272.  
  273. ErController_GetTrackerOrientation
  274.  
  275. ErController_SetTrackerOrientation
  276.  
  277. ErController_MoveTrackerOrientation
  278.  
  279.  
  280.  ErDrawContext_ClearImageBuffer
  281.  
  282.      This operation was tied too closely to certain types of renderers and
  283.  
  284.     could not be supported by others or by certain HW accelerators.  The
  285.  
  286.     scene is cleared now as part of the Q3View_StartRendering call.
  287.  
  288.     
  289.  
  290.  ErDrawContext_GetActiveBuffer
  291.  
  292.  ErDrawContext_SetActiveBuffer
  293.  
  294.      These calls dependent on certain features which can not be 
  295. supported by
  296.  
  297.     certain types of accelerators/renderers.  The double buffer state 
  298. variable
  299.  
  300.     in the DrawContext controls the destination buffer.
  301.  
  302.  
  303.  ErDrawContext_GetClearImageState
  304.  
  305.  ErDrawContext_SetClearImageState
  306.  
  307.      These calls were redundant and their functionality is absorved by 
  308. the
  309.  
  310.     ClearImageMethod in the DrawContext.
  311.  
  312.  
  313.  ErDrawContext_UpdateFrontBuffer
  314.  
  315.      This operation was tied too closely to certain types of renderers and
  316.  
  317.     could not be supported by others or by certain HW accelerators.  The
  318.  
  319.     front buffer is now updated as part of the Q3View_EndRendering 
  320. call.  Please
  321.  
  322.     read the description for Q3Renderer_Sync and Q3Renderer_Flush in 
  323. the
  324.  
  325.     documentation.
  326.  
  327.  
  328.  ErElementClass_GetElementSize
  329.  
  330.      <need explanation>
  331.  
  332.  
  333.  
  334.  ErFile_Open
  335.  
  336.      This function has been split into two, Q3File_OpenRead and 
  337. Q3File_OpenWrite.
  338.  
  339.     
  340.  
  341.  ErGeneralPolygon_GetContourAttributeSet
  342.  
  343.  ErGeneralPolygon_SetContourAttributeSet
  344.  
  345.    General polygons no longer have attribute sets per contour (didn't make 
  346. sense)
  347.  
  348.  
  349.  ErLightGroup_FindLight
  350.  
  351.      <need explanation>
  352.  
  353.  
  354.  ErMatrix3x3_SetRotateAboutPoint_Deg
  355.  
  356.  ErMatrix4x4_SetRotateAboutAxis_Deg
  357.  
  358.  ErMatrix4x4_SetRotateAboutPoint_Deg
  359.  
  360.  ErMatrix4x4_SetRotate_XYZ_Deg
  361.  
  362.  ErMatrix4x4_SetRotate_X_Deg
  363.  
  364.  ErMatrix4x4_SetRotate_Y_Deg
  365.  
  366.  ErMatrix4x4_SetRotate_Z_Deg
  367.  
  368.      You need to use the radians version of these functions.
  369.  
  370.  
  371.  ErMesh_PickHitGetInfo
  372.  
  373.     Removed in favor of the new ShapePart object.
  374.  
  375.  
  376.  ErOrderedDisplayGroup_CountObjectType
  377.  
  378.      <need explanation>
  379.  
  380.  
  381.  ErPick_GetFirstHit
  382.  
  383.     Removed in favor of the original, and more useful, ErPick_GetHitData
  384.  
  385.  
  386.  ErPick_GetNextHit
  387.  
  388.     Removed in favor of the original, and more useful, ErPick_GetHitData
  389.  
  390.  
  391.  ErPick_GetPreviousHit
  392.  
  393.     Removed in favor of the original, and more useful, ErPick_GetHitData
  394.  
  395.  
  396.  ErPoint3D_To2D
  397.  
  398.      Superseded by ErRationalPoint3D_To2D
  399.  
  400.  
  401.  
  402.  ErQuaternion_SetRotateAboutAxis_Deg
  403.  
  404.  ErQuaternion_SetRotateXYZ_Deg
  405.  
  406.  ErQuaternion_SetRotateX_Deg
  407.  
  408.  ErQuaternion_SetRotateY_Deg
  409.  
  410.  ErQuaternion_SetRotateZ_Deg
  411.  
  412.      You need to use the radians version of these functions.
  413.  
  414.  
  415.  ErRenderer_SetIsBoundingBoxVisibleFunc
  416.  
  417.      <need explanation>
  418.  
  419.  
  420.  ErTracker_GetAbsolute
  421.  
  422.   ErTracker_SetAbsolute
  423.  
  424. The notion of absolute trackers has been handled by usage of the 
  425. ErTracker_GetPosition and ErTracker_GetOrientation routines.  These can 
  426. either return both the absolute and relative contributions to motion, or 
  427. return the absolute and relative combined contributions.
  428.  
  429.  
  430.  ErTracker_GetCoordinates
  431.  
  432. This call has been split into ErTracker_GetPosition and 
  433. ErTracker_GetOrientation.
  434.  
  435.  
  436.  ErTracker_SetCoordinates
  437.  
  438. This call has been split into ErTracker_SetPosition for absolute 
  439. contributions to position, ErTracker_MovePosition for relative position, 
  440. ErTracker_SetOrientation for absolute rotation and 
  441. ErTracker_MoveOrientation for relative orientation.
  442.  
  443.  
  444. HARDWARE ACCELERATION
  445.  
  446.  
  447. Hardware acceleration happens "for free".  All you need to do is use the 
  448. interactive renderer:
  449.  
  450.  
  451.     renderer = Q3Renderer_NewFromType 
  452. (kQ3RendererTypeInteractive);
  453.  
  454.  
  455. And to make the images coherent, set up the drawContext to be double 
  456. buffered.
  457.  
  458.  
  459. In addition, some hardware rasterizer engines (such as Apple's) can 
  460. actually make coherent images without double buffering.  This can provide 
  461. a significant speed advantage, at the possible cost of some tearing.  To take 
  462. advantage of such hardware, you keep the drawContext double buffered 
  463. (to say that you want the images coherent) and make the call
  464.  
  465.  
  466.     Q3InteractiveRenderer_SetDoubleBufferBypass (renderer, kQ3True);
  467.  
  468.  
  469. In the unlikely event that you want to use a particular rasterizer with the 
  470. interactive renderer, you can set a "preference" with the call
  471.  
  472.  
  473.     Q3InteractiveRenderer_SetPreferences (renderer, vendor, engine);
  474.  
  475.  
  476. where vendor and engine are from QD3DAcceleration.h.  When we want to 
  477. show the difference between hardware and software rasterization, we use 
  478. this call to "prefer" the software rasterizer, or to just us the best available 
  479. rasterizer.
  480.  
  481.  
  482.  
  483. TEXTURE MAP STORAGE
  484.  
  485. You can use the texture map memoryStorage object to either keep the 
  486. pixels in "your domain" or "QD3D's domain".  That is either you can keep 
  487. the buffer (and modify it, e. g. for playing a QuickTime movie), or you can 
  488. let set up the image, then have QD3D copy it, then throw away your copy.  
  489. The former is better for animating texture maps, the latter requires less 
  490. bookkeeping on your part.
  491.  
  492.  
  493. In either case, you set up a TQ3StoragePixMap with
  494.  
  495.  
  496.     storagePixMap.image     = Q3MemoryStorage_New (<see below>);
  497.  
  498.     storagePixMap.width     = width;
  499.  
  500.     storagePixMap.height    = height;
  501.  
  502.     storagePixMap.rowBytes  = rowBytes;
  503.  
  504.     storagePixMap.pixelSize = 32;                // the only size supported
  505.  
  506.     storagePixMap.pixelType = kQ3PixelTypeRGB32; // the only type 
  507. supported
  508.  
  509.     storagePixMap.bitOrder  = kQ3EndianBig;      // the only order 
  510. supported
  511.  
  512.     storagePixMap.byteOrder = kQ3EndianBig;      // the only order 
  513. supported
  514.  
  515.  
  516. To keep the image in your domain (and incur no copy overhead) you 
  517. should make the memoryStorage object point to your buffer:
  518.  
  519.  
  520.     <create the off-screen gWorld>
  521.  
  522.     <image into the gWorld>
  523.  
  524.     baseAddr = <baseAddr of the gWorld pixMap>
  525.  
  526.     size = <rowBytes of the gWorld pixMap> * <height of pixMap>
  527.  
  528.     storagePixMap.image = Q3MemoryStorage_New (baseAddr, size, size);
  529.  
  530.  
  531. then DO NOT dispose of the gWorld.
  532.  
  533.  
  534. To animate the texture map:
  535.  
  536.  
  537.     <image into the gWorld>
  538.  
  539.     Q3MemoryStorage_SetBuffer (storagePixMap.image, baseAddr, size, 
  540. size);
  541.  
  542.  
  543. The _SetBuffer call tells QD3D that the image has changed.  This may be 
  544. necessary to force any caches to be rebuilt.
  545.  
  546.  
  547. On the other hand, to keep your bookkeeping to a minimum:
  548.  
  549.  
  550.     <create the off-screen gWorld>
  551.  
  552.     <image into the gWorld>
  553.  
  554.     baseAddr = <baseAddr of the gWorld pixMap>
  555.  
  556.     size = <rowBytes of the gWorld pixMap> * <height of pixMap>
  557.  
  558.     storagePixMap.image = Q3MemoryStorage_New (NULL, 0, 0);
  559.  
  560.     Q3MemoryStorage_Set (storagePixMap.image, baseAddr, size);
  561.  
  562.     <dispose of the gWorld>
  563.  
  564.  
  565. The _Set call copies the memory at baseAddr into memory that QD3D 
  566. allocates.
  567.  
  568.  
  569.  
  570. Known Bugs
  571.  
  572.  
  573. If you are using a Storage object which relies on a file reference number, 
  574. you will have problems trying to open a file after writing it out.  The 
  575. workaround is to quit your app and open the file after launching again.
  576.  
  577.  
  578. There is  a memory allocation problem, where we allocate more memory 
  579. than what is needed.  There is no workaround and a fix has been 
  580. implemented for the next release.
  581.  
  582.  
  583. Mesh’s edge attributes are not being honored.
  584.  
  585. In general, low memory conditions are not always handled gracefully.  
  586. They will for the B2 release.
  587.  
  588.  
  589. Parameters are not always validated, so invalid parameters may cause a 
  590. crash.  Full parameter validation, specially for the debug version, is going 
  591. to be in for B2.
  592.